home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / swing / TimerQueue.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  2.8 KB  |  170 lines

  1. package javax.swing;
  2.  
  3. import java.security.AccessController;
  4. import sun.awt.AppContext;
  5.  
  6. class TimerQueue implements Runnable {
  7.    private static final Object sharedInstanceKey = new StringBuffer("TimerQueue.sharedInstanceKey");
  8.    private static final Object expiredTimersKey = new StringBuffer("TimerQueue.expiredTimersKey");
  9.    Timer firstTimer;
  10.    boolean running;
  11.    private static final Object classLock = new Object();
  12.  
  13.    public TimerQueue() {
  14.       this.start();
  15.    }
  16.  
  17.    public static TimerQueue sharedInstance() {
  18.       synchronized(classLock) {
  19.          TimerQueue var1 = (TimerQueue)SwingUtilities.appContextGet(sharedInstanceKey);
  20.          if (var1 == null) {
  21.             var1 = new TimerQueue();
  22.             SwingUtilities.appContextPut(sharedInstanceKey, var1);
  23.          }
  24.  
  25.          return var1;
  26.       }
  27.    }
  28.  
  29.    synchronized void start() {
  30.       if (this.running) {
  31.          throw new RuntimeException("Can't start a TimerQueue that is already running");
  32.       } else {
  33.          ThreadGroup var1 = AppContext.getAppContext().getThreadGroup();
  34.          AccessController.doPrivileged(new 1(this, var1));
  35.          this.running = true;
  36.       }
  37.    }
  38.  
  39.    synchronized void stop() {
  40.       this.running = false;
  41.       this.notify();
  42.    }
  43.  
  44.    synchronized void addTimer(Timer var1, long var2) {
  45.       if (!var1.running) {
  46.          Timer var4 = null;
  47.  
  48.          Timer var5;
  49.          for(var5 = this.firstTimer; var5 != null && var5.expirationTime <= var2; var5 = var5.nextTimer) {
  50.             var4 = var5;
  51.          }
  52.  
  53.          if (var4 == null) {
  54.             this.firstTimer = var1;
  55.          } else {
  56.             var4.nextTimer = var1;
  57.          }
  58.  
  59.          var1.expirationTime = var2;
  60.          var1.nextTimer = var5;
  61.          var1.running = true;
  62.          this.notify();
  63.       }
  64.    }
  65.  
  66.    synchronized void removeTimer(Timer var1) {
  67.       if (var1.running) {
  68.          Timer var2 = null;
  69.          Timer var3 = this.firstTimer;
  70.  
  71.          boolean var4;
  72.          for(var4 = false; var3 != null; var3 = var3.nextTimer) {
  73.             if (var3 == var1) {
  74.                var4 = true;
  75.                break;
  76.             }
  77.  
  78.             var2 = var3;
  79.          }
  80.  
  81.          if (var4) {
  82.             if (var2 == null) {
  83.                this.firstTimer = var1.nextTimer;
  84.             } else {
  85.                var2.nextTimer = var1.nextTimer;
  86.             }
  87.  
  88.             var1.expirationTime = 0L;
  89.             var1.nextTimer = null;
  90.             var1.running = false;
  91.          }
  92.       }
  93.    }
  94.  
  95.    synchronized boolean containsTimer(Timer var1) {
  96.       return var1.running;
  97.    }
  98.  
  99.    synchronized long postExpiredTimers() {
  100.       long var4;
  101.       do {
  102.          Timer var1 = this.firstTimer;
  103.          if (var1 == null) {
  104.             return 0L;
  105.          }
  106.  
  107.          long var2 = System.currentTimeMillis();
  108.          var4 = var1.expirationTime - var2;
  109.          if (var4 <= 0L) {
  110.             try {
  111.                var1.post();
  112.             } catch (SecurityException var8) {
  113.             }
  114.  
  115.             this.removeTimer(var1);
  116.             if (var1.isRepeats()) {
  117.                this.addTimer(var1, var2 + (long)var1.getDelay());
  118.             }
  119.  
  120.             try {
  121.                this.wait(1L);
  122.             } catch (InterruptedException var7) {
  123.             }
  124.          }
  125.       } while(var4 <= 0L);
  126.  
  127.       return var4;
  128.    }
  129.  
  130.    public synchronized void run() {
  131.       try {
  132.          while(this.running) {
  133.             long var1 = this.postExpiredTimers();
  134.  
  135.             try {
  136.                this.wait(var1);
  137.             } catch (InterruptedException var5) {
  138.             }
  139.          }
  140.  
  141.       } catch (ThreadDeath var6) {
  142.          this.running = false;
  143.  
  144.          for(Timer var4 = this.firstTimer; var4 != null; var4 = var4.nextTimer) {
  145.             var4.cancelEvent();
  146.          }
  147.  
  148.          SystemEventQueueUtilities.restartTimerQueueThread();
  149.          throw var6;
  150.       }
  151.    }
  152.  
  153.    public synchronized String toString() {
  154.       StringBuffer var1 = new StringBuffer();
  155.       var1.append("TimerQueue (");
  156.       Timer var2 = this.firstTimer;
  157.  
  158.       while(var2 != null) {
  159.          var1.append(var2.toString());
  160.          var2 = var2.nextTimer;
  161.          if (var2 != null) {
  162.             var1.append(", ");
  163.          }
  164.       }
  165.  
  166.       var1.append(")");
  167.       return var1.toString();
  168.    }
  169. }
  170.